/**
 * 
 */
package santeclair.referentiel.optique.referentiel.dao.impl;

import java.text.Normalizer;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import org.springframework.stereotype.Repository;

import santeclair.lunar.framework.dao.jpa.impl.FwkGenericJpaDAO;
import santeclair.referentiel.optique.config.Constant;
import santeclair.referentiel.optique.model.LibelleRcs;
import santeclair.referentiel.optique.referentiel.dao.LibelleRcsDAO;

/**
 * @author cquintin
 * 
 */
@Repository
public class LibelleRcsDAOImpl extends FwkGenericJpaDAO<LibelleRcs> implements LibelleRcsDAO {

    @PersistenceContext(unitName = Constant.PERSISTENCE_UNIT_NAME)
    private EntityManager em;

    /**
     * {@inheritDoc}
     */
    @Override
    public Class<LibelleRcs> getEntityClass() {
        return LibelleRcs.class;
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public EntityManager getEntityManager() {
        return em;
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public List<LibelleRcs> getLibellesRcs() {
        return findAll();
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public LibelleRcs getLibelleRcsById(Integer idLibelleRcs) {
        return findById(idLibelleRcs);
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public LibelleRcs findByLibelle(String paramValue) {

        String tempLibelle = paramValue;
        tempLibelle = Normalizer.normalize(tempLibelle, Normalizer.Form.NFD);
        tempLibelle = tempLibelle.replaceAll("[^\\p{ASCII}]", "");

        List<LibelleRcs> libelleRcsList = findAll();

        LibelleRcs libelleRcsToReturn = null;

        String tempLibelleCourant;

        for (LibelleRcs libelleRcsCourant : libelleRcsList) {

            tempLibelleCourant = libelleRcsCourant.getLibellercs();
            tempLibelleCourant = Normalizer.normalize(tempLibelleCourant, Normalizer.Form.NFD);
            tempLibelleCourant = tempLibelleCourant.replaceAll("[^\\p{ASCII}]", "");

            if (tempLibelleCourant.equalsIgnoreCase(tempLibelle)) {

                libelleRcsToReturn = libelleRcsCourant;
                break;
            }
        }

        return libelleRcsToReturn;
    }

}
